package cn.iocoder.yudao.module.eval.service.monitoring;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.eval.controller.admin.monitoring.vo.EvalMonitoringDataPageReqVO;
import cn.iocoder.yudao.module.eval.controller.admin.monitoring.vo.EvalMonitoringDataSaveReqVO;
import cn.iocoder.yudao.module.eval.dal.dataobject.monitoring.EvalMonitoringDataDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 评价实施监控 Service 接口
 *
 * @author 芋道源码
 */
public interface EvalMonitoringDataService {

    /**
     * 创建评价实施监控
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMonitoringData(@Valid EvalMonitoringDataSaveReqVO createReqVO);

    /**
     * 更新评价实施监控
     *
     * @param updateReqVO 更新信息
     */
    void updateMonitoringData(@Valid EvalMonitoringDataSaveReqVO updateReqVO);

    /**
     * 删除评价实施监控
     *
     * @param id 编号
     */
    void deleteMonitoringData(Long id);

    /**
     * 获得评价实施监控
     *
     * @param id 编号
     * @return 评价实施监控
     */
    EvalMonitoringDataDO getMonitoringData(Long id);

    /**
     * 获得评价实施监控列表
     *
     * @param ids 编号
     * @return 评价实施监控列表
     */
    List<EvalMonitoringDataDO> getMonitoringDataList(Collection<Long> ids);

    /**
     * 获得评价实施监控分页
     *
     * @param pageReqVO 分页查询
     * @return 评价实施监控分页
     */
    PageResult<EvalMonitoringDataDO> getMonitoringDataPage(EvalMonitoringDataPageReqVO pageReqVO);

    /**
     * 根据计划ID获得监控数据列表
     *
     * @param planId 计划ID
     * @return 监控数据列表
     */
    List<EvalMonitoringDataDO> getMonitoringDataListByPlanId(Long planId);

    /**
     * 根据科目ID获得监控数据列表
     *
     * @param subjectId 科目ID
     * @return 监控数据列表
     */
    List<EvalMonitoringDataDO> getMonitoringDataListBySubjectId(Long subjectId);

    /**
     * 根据监控类型获得监控数据列表
     *
     * @param monitorType 监控类型
     * @return 监控数据列表
     */
    List<EvalMonitoringDataDO> getMonitoringDataListByMonitorType(String monitorType);

    /**
     * 处理监控异常
     *
     * @param id 编号
     * @param handleResult 处理结果
     */
    void handleMonitoringException(Long id, String handleResult);

    /**
     * 批量创建监控数据
     *
     * @param monitoringDataList 监控数据列表
     */
    void batchCreateMonitoringData(List<EvalMonitoringDataSaveReqVO> monitoringDataList);

    /**
     * 获取实时监控统计数据
     *
     * @param planId 计划ID
     * @return 统计数据
     */
    Object getMonitoringStatistics(Long planId);

}
